package org.pb.basic.mapper;

import org.springframework.stereotype.Repository;

import java.util.List;

/**
 * 提取的公共持久层代码接口
 * @author
 * @param <T, R> 业务层接口的泛型 —— 对应表的实体类 和 对应查询类
 */
@Repository
public interface BaseMapper<T, R> {

    /**
     * 添加一条数据
     * @param condition
     */
    void save(T condition);

    /**
     * 修改对应的数据
     * @param condition
     */
    void update(T condition);

    /**
     * 根据id删除对应的数据
     * @param id
     */
    void remove(Long id);

    /**
     * 根据id查询到某一条对应的数据
     * @param id
     * @return
     */
    T loadById(Long id);

    /**
     * 查询所有的部门数据
     * @return
     */
    List<T> findAll();

    /**
     * 获取查询条件所对应的记录条数
     * @param query
     * @return
     */
    Integer countQuery(R query);

    /**
     * 根据部门查询条件，获取到对应的查询结果集合
     * @param query
     * @return
     */
    List<T> findByQuery(R query);

    /**
     * 根据id集合，批量删除数据
     * @param ids 要删除的数据的id集合
     */
    void batchRemove(List<Long> ids);

}
